home *** CD-ROM | disk | FTP | other *** search
- org $28000
- load $28000
- ;Konstanten
- Gap_len = 900
- DMA_ReadBytes = [($440*11+Gap_len)/2]+2
- ;fuer DMA-Transfer
- DiskBuf = $70000
- BlockSize = 512
- Drive = 0
- MAX_HeadMoves = 2
- MAX_ReadTries = 10
-
- WaitBlit: Macro
- \@1
- btst #6,$2(a6)
- bne.s \@1
- ENDM
- j1:
- lea DiskDemo1(pc),a0
- move.l a0,$80.w
- trap #0
- jmp $30000
- DiskDemo1:
- movem.l d0-d7/a0-a6,-(a7)
- lea $30000,a0
- moveq #80,d0
- moveq #02,d1
- bsr.b Trackloader
- movem.l (a7)+,d0-d7/a0-a6
- rte
- ;Trackloader
- ;-----------
- Trackloader:
- movem.l d0-d7/a0-a6,-(a7)
- subq.w #1,d1
- bmi.b LT_LoadDone
- lea ReadError(pc),a4
- bsr.b LT_MoveHead
- LT_LoadLoop:
- moveq #MAX_HeadMoves,d6
- bra.s LT_NoHead
- LT_HeadRetry:
- bsr.b LT_MoveHead
- LT_NoHead:
- moveq #MAX_ReadTries,d5
- LT_ReadRetry:
- bsr.w LT_ReadTrack
- bsr.w BlitDecode
- ;bsr.w CPU_Decode
- move.b (a4),d7
- beq.s LT_MoreMore
- dbf d5,LT_ReadRetry
- dbf d6,LT_HeadRetry
- move.w #$4444,d7
- LT_WasError:
- move d7,$dff180
- dbf d7,LT_WasError
- LT_MoreMore:
- lea $1600(a0),a0
- addq.w #1,d0
- bchg #2,(a5)
- btst #0,d0
- bne.s LT_Load2
- bclr #1,(a5)
- bclr #0,(a5)
- nop
- bset #0,(a5)
- bsr.b LT_TIME
- LT_Load2:
- dbf d1,LT_LoadLoop
- bsr.b LT_Leaver
- LT_LoadDone:
- movem.l (a7)+,d0-d7/a0-a6
- rts
- ReadError: dc.w 0
-
- LT_MoveHead:
- lea $bfd100,a5
- move.b #$7f,(a5)
- nop
- bclr #Drive+3,(a5)
- nop
- LT_MH0:
- btst #5,$f01(a5)
- bne.s LT_MH0
- LT_Move2Zero:
- btst #4,$f01(a5)
- beq.s LT_HeadAtZero
- bclr #0,(a5)
- nop
- bset #0,(a5)
- bsr.b LT_TIME
- bra.s LT_Move2Zero
- LT_HeadAtZero:
- bset #2,(a5)
- moveq #0,d2
- move.b d0,d2
- lsr.w #1,d2
- bcc.s LT_HeadOK
- bclr #2,(a5)
- LT_HeadOK:
- subq.w #1,d2
- bmi.s LT_HeadMoved
- bclr #1,(a5)
- LT_MH1:
- bclr #0,(a5)
- nop
- bset #0,(a5)
- bsr.b LT_TIME
- dbf d2,LT_MH1
- LT_HeadMoved:
- rts
- LT_Leaver:
- move.b #$fd,(a5)
- bset #Drive+3,(a5)
- bset #0,(a5)
- rts
- LT_TIME:
- moveq #64,d7
- bsr.b TimeWait
- rts
- TimeWait:
- movem.l d1/d2,-(a7)
- TimeWait0:
- move.w $dff006,d1
- lsr.w #8,d1
- TimeWait1:
- move.w $dff006,d2
- lsr.w #8,d2
- cmp.w d1,d2
- beq.s TimeWait1
- dbf d7,TimeWait0
- movem.l (a7)+,d1/d2
- rts
- LT_ReadTrack:
- lea $dff000,a6
- move.w #$7f00,$9e(a6)
- move.w #$8500,$9e(a6)
- move.w #$4489,$7e(a6)
- move.w #$8210,$96(a6)
- LT_RT0:
- btst #5,$f01(a5)
- bne.s LT_RT0
- move.w #$4000,$24(a6)
- move.l #DiskBuf,$20(a6)
- move.w #$8000+DMA_ReadBytes,d2
- move.w d2,$24(a6)
- move.w d2,$24(a6)
- move.w #$2,$9c(a6)
- LT_RT1:
- btst #1,$1f(a6)
- beq.s LT_RT1
- move.w #$4000,$24(a6)
- move.w #$0400,$9e(a6)
- rts
- ;---------------------------------------------------------------------------
- BlitDecode:
- movem.l d0-d7/a0-a6,-(a7)
- move.l #$55555555,d4
- lea $dff000,a6
- lea DiskBuf,a1
- moveq #10,d7
- Blit_Dec0:
- cmp.w #$4489,(a1)+
- bne.s Blit_Dec0
- cmp.w #$4489,(a1)
- bne.s Blit_Dec1
- addq.l #2,a1
- Blit_Dec1:
- bsr.w Blit_CheckBlock
- ;bsr.w CPU_CheckBlock
- move.b d0,(a4)
- bne.s Blit_Error
- movem.l (a1),d2/d3
- and.w d4,d2
- and.w d4,d3
- add.w d2,d2
- or.w d3,d2
- lsr.w #8,d2
- lsl.w #8,d2
- add.w d2,d2
- lea (a0,d2.w),a2
- lea 56(a1),a1
- bsr.b Blit_DoBlit
- subq.l #1,a1
- dbf d7,Blit_Dec0
- Blit_Error:
- movem.l (a7)+,d0-d7/a0-a6
- rts
- Blit_DoBlit:
- WaitBlit
- move.w #$8640,$96(a6)
- move.l #$1dd80002,$40(a6)
- move.l #$ffffffff,$44(a6)
- moveq #0,d2
- move.l d2,$62(a6)
- move.w d2,$66(a6)
- move.w d4,$70(a6)
- lea BlockSize-1(a1),a1
- move.l a1,$50(a6)
- lea BlockSize(a1),a1
- move.l a1,$4c(a6)
- lea BlockSize-1(a2),a2
- move.l a2,$54(a6)
- move.w #$0808,$58(a6)
- rts
- Blit_CheckBlock:
- movem.l d2/d3/a2/a3,-(a7)
- movem.l 48(a1),d2/d3
- and.l d4,d2
- add.l d2,d2
- and.l d4,d3
- or.l d3,d2
- lea 56(a1),a2
- lea 48(a1),a3
- moveq #0,d0
- move.l d0,(a3)
- waitblit
- move.w #$8640,$96(a6)
- move.l a3,$4c(a6)
- move.l a2,$50(a6)
- move.l a3,$54(a6)
- move.l #$0d3c0000,$40(a6)
- move.l #$FFFFFFFF,$44(a6)
- move.w #$FFFc,$62(a6)
- move.l #$0000FFFC,$64(a6)
- move.w #$4002,$58(a6)
- waitblit
- move.l (a3),d0
- and.l d4,d0
- sub.l d2,d0
- sne d0
- movem.l (a7)+,d2/d3/a2/a3
- rts
-